package com;

import org.openjdk.jol.info.ClassLayout;


public class 锁的执行原理 {
    public static void main(String[] args) {
        /**
         * 我们可以打印类的布局可观察到在加锁和不加锁的时候，加锁对象的头部会不一样
         * 如果调用了hashCode方法之后也可以改变我们的markword，哪怕没上锁
         * 所以markword有三个作用，分别是记录锁信息，记录垃圾回收期信息，记录hashCode信息
         * 对象结构
         *      markword
         *      class pointer 类型指针
         *      instance data 实例数据
         *      padding 对齐
         */
        Object obj = new Object();
        System.out.println(ClassLayout.parseInstance(obj).toPrintable());
        synchronized (obj){
            System.out.println(ClassLayout.parseInstance(obj).toPrintable());
        }
        System.out.println(ClassLayout.parseInstance(obj).toPrintable());
    }
}
